
import java.io.Console;
/*
 * 因为输入对所有人都可见，所以Scanner类不适用于从控制台读取密码。
 * 可以使用Console类来达到这个目的。
 */
public class Console_ {
	public static void main(String[] args) {
		//该段代码仅能在命令行中编译运行 在IDE中运行会抛 NullPointerException
		//因为 System.console() 只会为通过控制台窗口进行交互的用户返回一个Console
		//对象，否则返回null。(当然不同的操作系统也有可能不同 但至少Win11不行)
		//国内的Windows操作系统中的控制台的编码使用的是GBK因此要想能成功编译运行该程序
		//还需要将该文件的编码更改为GBK才行(当前为UTF-8)
		//该程序编译后的.class文件位于bin目录下的相同路径中
		Console cons=System.console();
		String userName=cons.readLine("User name: ");
		//cons.readPassword() 不回显用户的输入
		char[] passwd=cons.readPassword("Password: ");
		//为了安全起见，将返回的密码存放在一个字符数组中，而不是一个字符串中。
		//完成对密码的处理之后，应该马上用一个填充值覆盖数组元素。
		System.out.println(userName);
		System.out.println(new String(passwd));
		//static char[] readPassword(String prompt,Object... args)
		//static String readLine(String prompt,Object... args)
		//显示提示符(prompt)并读取用户输入，直到输入行结束。可选的args参数用来提供
		//格式参数。
		
		//使用Console对象处理输入不如使用Scanner方便。必须一次读取一行输入，而且
		//Console类没有提供方法来读取单个单词或数字。
	}
}
